#作者xiao

位数上限=10
#设置输入位数上限。如设置值为5，则最大可分解五位数99999
#如设置过大，将导致初始化时间较长。
显示=print
整=int
文=str
数列=range
输入=input

def 质数(n=2,m=-1,x=-1,位数上限=-1):
  """输出小于n，或n-m之间的质数，或分解x的质因数
    
  质数(n) 质数(n,m) 质数(x=数字)  作者xiao
  初次分解x先设置位数上限 质数(位数上限=7)
  如设置为5，最大分解99999，以此类推
  """
  global 质数表,位数
  if not 位数上限==-1:  n,位数=整(10**(位数上限/2)),位数上限
  if x==-1:
    if m==-1:n,m=2,n
    #给出n-m之间的质数表
    质数表=[2, 3, 5, 7]
    开,关=1,3
    while m>质数表[-1]+1:
      开始,结束=质数表[开]**2,质数表[关]**2
      开,关=关,关+2
      for a in 数列(开始,结束,2):
        for 质数 in 质数表[1:开]:
          if a%质数==0:  break
        else:  质数表.append(a)
    质数表=[d for d in 质数表 if n<=d<=m]
    return 质数表
  else:
    #分解x的质因数
    if x<2:  return '数字超范围'
    elif x in [2,3,5,7]:  return 文(x)+'=质数' #[x]
    elif x>整(10**位数-1):
      return '数字超范围：'+文(10**位数-1)
    else:
      因数表,文本z=[0],''
      a,v=x,1
      while v:          
        for 质数 in 质数表:
          if a%质数==0:
            因数表+=[质数]
            if a==质数:  v=0
            a=a//质数
            break
        else:
          因数表+=[a]
          break
      if 因数表[1]==x:  return 文(x)+'=质数' #[x]
      else:
        for y in 因数表[1:]:  文本z+=文(y)+'x'
        return 文(x)+'='+文本z[:-1] #因数表[1:]

显示('正在初始化：上限','9'*位数上限)
if 位数上限>11 :显示('预测需要：',整(4.4**(位数上限-11)),'秒')
质数(位数上限=位数上限)
显示("初始化完成")
#for x in 数列(0,1001,1):显示(质数(x=x))


while 1:
  try:x=abs(整(输入('分解质因数：')))
  except:  pass
  else:显示(质数(x=x))